package com.os.mapper.system;

import com.os.model.system.SysRole;
import com.os.model.system.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author Matt
 * @Date 2022-07-08
 * @Desc:
 * @Version V1.0
 */
public interface UserMapper {

    /**
     * 通过id查询用户
     * @param id  用户id
     * @return
     */
    SysUser selectById(Long id);

    /**
     * 查询全部用户
     * @return
     */
    List<SysUser> selectAll();

    /**
     * 根据用户id获取角色信息
     * @param userId  用户Id
     * @return
     */
    List<SysRole> selectRoleByUserId(Long userId);

    /**
     * 新增用户
     * @param sysUser  新增的用户对象
     * @return
     */
    int insert(SysUser sysUser);

    /**
     * 新增用户，使用useGeneratedKeys
     * @param sysUser  新增的用户对象
     * @return
     */
    int insert2(SysUser sysUser);

    /**
     * 新增用户，使用useGeneratedKeys
     * @param sysUser  新增的用户对象
     * @return
     */
    int insert3(SysUser sysUser);

    /**
     * 根据主键更新
     * @param sysUser  需要更新的对象
     * @return
     */
    int updateById(SysUser sysUser);

    /**
     * 根据用户id删除
     * @param id  用户主键
     * @return
     */
    int deleteById(Long id);

    /**
     * 根据用户id和角色enabled状态获取用户的角色
     * @param userId  用户id
     * @param enabled  角色enabled
     * @return
     */
    List<SysRole> selectRoleByUserIdAndRoleEnabled(@Param("userId") Long userId, @Param("enabled") Integer enabled);

    List<SysRole> selectRoleByUserIdAndRoleEnabledBean(@Param("user") SysUser sysUser, @Param("role") SysRole sysRole);

    /**
     * 根据用户条件动态查询
     * @param sysUser  用户对象
     * @return
     */
    List<SysUser> selectByUserCondition(SysUser sysUser);

    /**
     * 根据主键更新数据
     * @param sysUser  用户对象
     * @return
     */
    int updateByIdSelective(SysUser sysUser);

    int updateByIdSelective2(SysUser sysUser);

    /**
     * 插入用户数据
     * @param sysUser 插入用户
     * @return
     */
    int insert4(SysUser sysUser);

    /**
     * 根据用户id或用户名查询
     * @param sysUser  查询用户
     * @return
     */
    SysUser selectByIdOrUserName(SysUser sysUser);

    List<SysUser> selectByUserCondition2(SysUser sysUser);

    List<SysUser> selectByIdList(List<Long> idList);

    /**
     * 批量插入用户信息
     * @param userList  批量用户信息
     * @return
     */
    int insertList(@Param("userList") List<SysUser> userList);

    int updateByMap(@Param("userMap") Map<String, Object> map);

    List<SysUser> selectByBind(SysUser sysUser);

    SysUser selectUserAndRoleById(Long id);

    SysUser selectUserAndRoleById2(Long id);

    SysUser selectUserAndRoleById3(Long id);

    SysUser selectUserAndRoleByIdSelect(Long id);

    List<SysUser> selectAllUserAndRoles();

    List<SysUser> selectAllUserAndRoles2();

    SysUser selectAllUserAndRolesSelect(Long id);

}
